package com.sxhuayuan.parking.service;

import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import org.springframework.data.geo.GeoResult;
import org.springframework.data.redis.connection.RedisGeoCommands.GeoLocation;

public interface RedisService {

	/**
	 * 新增
	 */
	public boolean saveString(String k, String t);

	/**
	 * 新增或修改
	 */
	public boolean updateString(String k, String t);

	/**
	 * 新增或修改
	 * 
	 * @param k
	 * @param t
	 * @param time
	 * @return
	 */
	public boolean updateString(String k, String t, long time);

	/**
	 * 新增或修改
	 * 
	 * @param k
	 * @param t
	 * @param time
	 *            秒
	 * @return
	 */
	public boolean saveString(String k, String t, long time);

	/**
	 * 删除
	 */
	public boolean removeString(String k);

	/**
	 * 查询
	 * 
	 * @param k
	 * @return
	 */
	public String getString(String k);

	/**
	 * 保存set，可设置过期时间(单位s)
	 * 
	 * @param k
	 * @param v
	 * @param time
	 * @return
	 */
	public boolean saveSet(String k, String v, long time);

	public boolean saveSet(String k, String v);

	public boolean saveSet(String k, Set<String> v, long time);

	public boolean saveSet(String k, Set<String> v);

	public Set<String> getSet(String k);

	public boolean saveList(String k, String v, long time);

	public boolean saveList(String k, String v);

	public boolean saveList(String k, List<String> v, long time);

	public boolean saveList(String k, List<String> v);

	public List<String> getList(String k, long start, long end);

	public long getListSize(String k);

	public boolean removeOneOfList(String k);

	public boolean existsInSet(String k, String v);

	/**** 消息队列操作 ****/
	/**
	 * 存入队列尾部（先进先出）
	 * 
	 * @param queueName
	 * @param v
	 * @return
	 */
	public boolean leftpush(String queueName, String v);

	/**
	 * 从队列头部取出（先进先出）
	 * 
	 * @param queueName
	 * @return
	 */
	public String rightpop(String queueName);

	/**
	 * 从队列头部取出（先进先出）
	 * 
	 * @param queueName
	 * @return
	 */
	public String rightpop(String queueName, long time, TimeUnit unit);

	/**
	 * 添加地理位置集合
	 * 
	 * @param set集合名
	 * @param jdLongitude
	 * @param wdLatitude
	 * @param t
	 * @return
	 */
	public boolean geoAdd(String set, String jdLongitude, String wdLatitude, String member);

	/**
	 * 删除geo集合
	 * 
	 * @param set
	 * @return
	 */
	public boolean geoRemove(String set, String... members);

	/**
	 * 查找附近的点
	 * 
	 * @param set
	 * @param jdLongitude
	 * @param wdLatitude
	 * @param m半径米
	 * @return
	 */
	public List<GeoResult<GeoLocation<byte[]>>> findGeoRadiusList(String set, String jdLongitude, String wdLatitude, long m);

	public void hashAdd(String name, String key, Object value);

	public boolean hashAddNX(String name, String key, Object value);

	public Object hashGet(String name, String key);

	public boolean hashDel(String name, String key);

	public boolean hashExists(String name, String key);

	public boolean hashIncreaseBy(String name, String key, Long increase);

	/** 获取所有key */
	public Set<String> hashKeys(String name);
}
